package com.jinghang.scala_base._1_Scala集合

object ListApp {

  def main(args: Array[String]): Unit = {
    val nums = scala.collection.mutable.ListBuffer[Int]()
    nums += (1,2,3)


    println(sum(1,2,3))
  }


  /**
    * 不可变集合
    * 可做为广播变量、共享变量能优化性能，节省空间
    */

  val l = List(1, 2, 3, 4, 5)

  //获取list第一个元素
  l.head

  l.tail //选择除了第一个元素的所有元素，返回值为List类型
  l.tail(2) //获取倒数第二个 元素

  Nil //空的集合
  // e::l 符号 把元素e放入集合Nil第一个位置
  val l2:List[Int] = 1 :: Nil

  val l3 = 8 :: l //拼接元素 8  到 l头部

  val l4 = 1 :: 2 :: 3 :: Nil


  /**
    * 可变列表
    */
  val l5 = scala.collection.mutable.ListBuffer[Int]()

  // 添加元素
  l5 += 2
  l5 += (3, 4, 5)
  l5 ++= List(6, 7, 8, 9)

  //去除元素
  l5 -= 2
  l5 -= 3
  l5 -= (1, 4)
  l5 --= List(5, 6, 7, 8)


  println(l5)


  l5.isEmpty//判断是否为空
  l5.head//返回第一个元素
  l5.tail//去除第一个元素
//  l5.tail(1)

  //递归算法的应用
  val nums = scala.collection.mutable.ListBuffer[Int]()
  nums += (1,2,3)

  /**
  (1,2,3).head + sum((1,2,3).tail: _*) = 1+ sum((1,2,3).tail: _*) = 1 + sum((2,3))
    1 + sum((2,3))= 1+2 + sum((3)) = 1+2+3
    */
  def sum(nums: Int*): Int = {
    if (nums.length == 0) {
      0
    } else {
      nums.head + sum(nums.tail: _*)
    }
  }

  val set = scala.collection.mutable.Set[Int]()
  set += 1
  set += (1, 1,3,3,4)

  //println(sum())
  //println(sum(1, 2, 3, 4))
}
